package cn.itsource.user.controller;

import cn.itsource.dto.BinderDto;
import cn.itsource.user.WechatConstant;
import cn.itsource.user.service.IWechatService;
import cn.itsource.utils.AjaxResult;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

@Controller //这里千万注意：不是RestController
@RequestMapping("/wechat")
public class WechatController {
    @Autowired
    private IWechatService wechatService;

    /**
     * 跳转到  用户 扫码登录的界面（界面中就一个二维码）
     * @return
     */
    @RequestMapping("/tologin")
    public String toLogin() {//这是前端请求发过来，会直接跳转到一个新view视图界面
        String codeUrl = WechatConstant.CODE_URL.replace("APPID", WechatConstant.APPID)
                .replace("REDIRECT_URI", WechatConstant.REDIRECT_URI);
        System.out.println(">>>>>>>>>codeUrl=" + codeUrl);
        //重定向到指定的 路径
        return "redirect:" + codeUrl;
    }

    @RequestMapping("/callback")
    public String callBack(String code){
        System.out.println("code="+code);
        //因为这里是一个同步操作，每个请求，都必须返回一个页面。
        //所以：在拿到code授权码后，做一个【中转界面callback.html】，这个页面中，没有内容，只有脚本
        return "redirect:http://localhost:8081/callback.html?code="+code;
    }

    /**
     * 这个方法作用：根据授权码来 获取token令牌
     * @param map
     * @return
     */
    @RequestMapping("/handleCallback")
    @ResponseBody //异步请求
    public AjaxResult handleCallback(@RequestBody  Map map){
        System.out.println(">>>>>>>>>>>>>>>>>>>>>"+ JSONObject.toJSONString(map));
        return wechatService.handleCallback(map);
    }


    @PostMapping("/binder")
    @ResponseBody
    public AjaxResult binder(@RequestBody BinderDto dto){
        return wechatService.binder(dto);
    }

}
